package com.yu1996.Algorithm.Sorting;


import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
 * @Description: 选择排序    总结：80000随机数的执行时间大约2-3秒
 * @author: xing
 * @Date: 2019/8/14 14:20
 */
public class SelectSort {

    public static void main(String[] args) {
        //定义数组  保存需要排序的数据
//        int[] arr = {5, 1, 9, 3, 8, 100, -2};
        //测试80000个随机数的执行时间
        int[] arr = new int[80000];
        for (int i = 0; i < 80000; i++) {
            arr[i] = (int) (Math.random() * 80000);
        }

        //测试冒泡排序所需时间
        Date date1 = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd  hh:mm:ss");
        String date1Str = dateFormat.format(date1);
        System.out.println(date1Str);
        selectSort(arr);
        Date date2 = new Date();
        String date2Str = dateFormat.format(date2);
        System.out.println(date2Str);
    }


    /**
     * @Description 选择排序    每次遍历 找出最小值 并赋值给arr[i]
     * @Author xing
     * @Date 2019/8/14 14:22
     * @Param
     * @Return
     * @Exception
     */
    public static void selectSort(int[] arr) {

        for (int i = 0; i < arr.length - 1; i++) {
            int select = i;
            int val = arr[i];
            for (int j = i + 1; j < arr.length; j++) {
                //判断当前值是否大于下一个值   如果大则将较小的值和下标保存
                if (arr[j] < val) {
                    select = j;
                    val = arr[j];
                }
            }
            //当一轮结束  将最小的值与最前面互换
            if (select != i) {
                arr[select] = arr[i];
                arr[i] = val;
            }
//            System.out.println("第" + (i + 1) + "轮遍历:");
//            System.out.println(Arrays.toString(arr));
        }
    }
}
